<html>
    <head>
        <title>Simian - Similarity Analyser | Duplicate Code Detection for the Enterprise | Overview</title>
    </head>

    <body>
        <center>
        <h2>Simian - Similarity Analyser</h2>
        </center>

        <h3>Purpose</h3>

        <p>Simian (Similarity Analyser) identifies duplication in Java, C#, C, C++, COBOL, Ruby, JSP, ASP, HTML, XML,
        Visual Basic, Groovy source code and even plain text files. In fact, simian can be used on any human readable
        files such as ini files, deployment descriptors, you name it.</p>

        <p>Especially on large enterprise projects, it can be difficult for any one developer to keep track of all the
        features (classes, methods, etc.) of the system.</p>

        <p>Simian runs natively in any .NET 1.1 or higher supported environment and on any Java 1.4 or higher virtual
        machine, meaning Simian can be run on just about any hardware and any operating system you can hope for. Both
        the Java and .NET runtimes are included as part of the <a href="get_it_now.html">distribution</a>.</p>

        <p>Simian can be used as part of the build process during development or as a guide when re-factoring. Think of
        Simian as an independent pair of eyes that will assist in raising the quality of your software.</p>

        <p>Within minutes, Simian can save you literally thousands of dollars in time spent performing maintenence,
        debugging and re-factoring.</p>

        <p>With <a href="get_it_now.html">licensing</a> available to suite personal, project and enterprise use, simian
        is ideally suited for use on your project.</p>

        <h3>Why do I need Simian?</h3>
        <p>Imagine for example that a bug is discovered in a method somewhere in a project. The developer duly writes a
        test case, makes the necessary code changes, ensures the test passes, checks the code in and considers the job
        finished!</p>

        <p>Right?</p>

        <p>Wrong!</p>

        <p>Unknown to the developer, some weeks earlier, a fellow team mate discovered the same piece of code and
        realised that it did <i>almost</i> everything they needed to solve a problem thye were working on at the time.
        So they copied the 15 lines of code into their new method, added some more code to do the extra functionality
        required and checked in the changes. </p>

        <p>Of course what they didn't know at the time was that the code they were copying had a bug in it! In fact at
        the time no one knew this. So now the original bug has been fixed but unfortunately none of the copies were
        fixed because no one knew they even existed.</p>

        <p>Copying and pasting isn't the only way for this to occur. Duplicate code can also creep into through
        developers independently implementing similar features.</p>

        <p>Simian catches these and other instances of duplication and can be configured to either flag them as
        warnings or even <i>"break the build"</i>, ensuring that copy and pasting never again causes you or your
        project problems.</p>

        <h3>Performance</h3>
        <p>Running against a large source base such as the entire 390,309 LOC* (1.2 million lines of raw source) in
        4,242 files of the JDK 1.5.0_13 source, identified 66,375 duplicate LOC* in 1,260 files in less than 10 seconds
        using as little as 48M of heap**!</p>

        <p>* A line of code is any line considered to be significant. Blank lines, comments, etc. do not count towards
        this figure.</p>

        <p>** Results may vary depending on factors such as hardware, operating system, processing options, etc.</p>

        <h3>What's in a name?</h3>
        <p>The dictionary defines Simian to mean "Relating to, characteristic of, or resembling an ape or a monkey."
        </p>

        <p>What does this have to do with code duplication? Well I thought that when people copied and pasted code,
        they were acting like monkeys. In fact the Checkstyle plugin is called <tt>SimianCheck</tt> :-).</p>

        <p>Or you could think of Simian as helping you with some of the monkey work. The Ant task is called
        <tt>SimianTask</tt>.</p>

        <p>In any event, it only occured to us later that Simian could stand for SIMIlarity ANalyser.</p>

        <hr />
        <p align="center"><font size=".5">Java and all Java-based marks are trademarks or registered trademarks of Sun
        Microsystems, Inc. in the United States and other countries.<br /><br />

        .NET and all .NET-based marks are trademarks or registered trademarks of Microsoft&reg; in the United States and
        other countries.<br /><br />

        Copyright (c) 2003-11 Simon Harris.  All rights reserved.</font></p>
    </body>
</html>